package com.gitee.feizns.quickstart.validation;

import java.util.regex.Pattern;

/**
 * 正则表达式
 * @author feizns
 * @since 2025/4/10
 */
public abstract class Regexps {

    /**
     * 变量标识符（包含unicode字符）
     */
    public static final String UnicodeVariableIdentifier = "^[\\p{L}\\p{Nl}\\p{Mn}\\p{Mc}\\p{Pc}\\p{Cf}\\$][\\p{L}\\p{Nl}\\p{Mn}\\p{Mc}\\p{Nd}\\p{Pc}\\p{Cf}\\$0-9_]*$";

    /**
     * Unicode 变量标识符模式
     */
    public static final Pattern UnicodeVariableIdentifierPattern = Pattern.compile(UnicodeVariableIdentifier);

    /**
     * 是否是Unicode 变量标识符
     * @param value 值
     * @return boolean
     */
    public static boolean isUnicodeVariableIdentifier(String value) {
        return UnicodeVariableIdentifierPattern.matcher(value).matches();
    }

    /**
     * 英文变量标识符
     */
    public static final String EnglishVariableIdentifier = "^[a-zA-Z_$][a-zA-Z0-9_$]*$";

    /**
     * 英文变量标识符模式
     */
    public static final Pattern EnglishVariableIdentifierPattern = Pattern.compile(EnglishVariableIdentifier);

    /**
     * 是否是英语变量标识符
     * @param value 值
     * @return boolean
     */
    public static boolean isEnglishVariableIdentifier(String value) {
        return EnglishVariableIdentifierPattern.matcher(value).matches();
    }

    /**
     * 中文
     */
    public static final String Chinese = "^[\\u4e00-\\u9fa5]+$";

    /**
     * 中文模式
     */
    public static final Pattern ChinesePattern = Pattern.compile(Chinese);

    /**
     * 是否是中文
     * @param value 值
     * @return boolean
     */
    public static boolean isChinese(String value) {
        return ChinesePattern.matcher(value).matches();
    }

    /**
     * 英文
     */
    public static final String English = "^[a-zA-Z]+$";

    /**
     * 英文模式
     */
    public static final Pattern EnglishPattern = Pattern.compile(English);

    /**
     * 是否是英语
     * @param value 值
     * @return boolean
     */
    public static boolean isEnglish(String value) {
        return EnglishPattern.matcher(value).matches();
    }

    /**
     * 电子邮件
     */
    public static final String Email = "^[\\w!#$%&'*+/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+/=?`{|}~^-]+)*@(?:[a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$";

    /**
     * 电子邮件模式
     */
    public static final Pattern EmailPattern = Pattern.compile(Email);

    /**
     * 是否是电子邮件
     * @param value 值
     * @return boolean
     */
    public static boolean isEmail(String value) {
        return EmailPattern.matcher(value).matches();
    }

    /**
     * IPv4
     */
    public static final String IPv4 = "^((25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$";

    /**
     * IPv4 模式
     */
    public static final Pattern IPv4Pattern = Pattern.compile(IPv4);

    /**
     * 是否是ipv4
     * @param value 值
     * @return boolean
     */
    public static boolean isIPv4(String value) {
        return IPv4Pattern.matcher(value).matches();
    }

    /**
     * 电话（中国大陆）
     */
    public static final String ChinaPhone = "^((13\\d)|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18\\d)|(19[0,1,5,6,7,8,9]))\\d{8}$";

    /**
     * 电话（中国大陆）模式
     */
    public static final Pattern ChinaPhonePattern = Pattern.compile(ChinaPhone);

    /**
     * 是否是中国电话
     * @param value 值
     * @return boolean
     */
    public static boolean isChinaPhone(String value) {
        return ChinaPhonePattern.matcher(value).matches();
    }

}
